/****************************************************************************
 * clkgate.v
 ****************************************************************************/

/**
 * Module: clkgate
 * 
 * 时钟门控模块
 * 时钟使能信号先经过时钟信号低电平同步锁存，然后控制时钟信号
 */

module clkgate
(
    input   clk_in,
    input   clk_en,
    output  clk_out
);
	
    reg en_r;

    // 门控使能信号先经过一级时钟低电平同步锁存，避免产生毛刺
    always@(*)
        if (!clk_in)
            en_r = clk_en;

    assign clk_out = en_r & clk_in;
    
endmodule